import { defineStore } from "pinia";
import { ApiRes } from '@/types/data'
import { Profile } from '@/types/user'
import request from '@/utils/request'
import {setProfile,getProfile,removeProfile} from "@/utils/storage"
import useStore from "../index";
import Message from "@/components/message/index"


export  default  defineStore('user',{
    state(){
        return{
         // 用户信息
         // profile: {} as Profile,
          // 个人信息 => 从本地取
          profile: getProfile() || {},
        }
    },
    actions:{
        // 登录----------------------------------------
        // 用户名和密码登录
        async login(account: string, password: string) {
        const res = await request.post<ApiRes<Profile>>('/login', {
          account,
          password,
        })
        // 1. 保存用户信息到 state 中
        this.profile = res.data.result
        setProfile(res.data.result)  //本地
         
          // 登录成功后，合并购物车
          const { cart } = useStore()
          cart.mergeLocalCart()
          // Message.success('登录成功')
          // router.push('/')
        },
        //短信验证登录
        async mobileLogin(mobile: string, code: string) {
          const res = await request.post<ApiRes<Profile>>('/login/code', {
            mobile,
            code
          })
          // 1. 保存用户信息到 state 中
          this.profile = res.data.result
          setProfile(res.data.result)
            // 登录成功后，合并购物车
            const { cart } = useStore()
            cart.mergeLocalCart()
        },
        //qq登录
        async qqLogin(openId:string){
          const res = await request.post<ApiRes<Profile>>(
            '/login/social',{
              unionId: openId,
              source: 6
            })
          // 1. 保存用户信息到 state 中
          this.profile = res.data.result
          setProfile(res.data.result)
            // 登录成功后，合并购物车
            const { cart } = useStore()
            cart.mergeLocalCart()
        },
         // QQ绑定完成 提供绑定的 action 登录
         async qqBindLogin(openId: string, mobile: string, code: string) {
          const res = await request.post<ApiRes<Profile>>('/login/social/bind', {
            mobile,
            code,
            unionId: openId
          })
          // 1. 保存用户信息到 state 中
          this.profile = res.data.result
          setProfile(res.data.result)
            // 登录成功后，合并购物车
          const { cart } = useStore()
          cart.mergeLocalCart()
        },
        // ----------------------------------------
          //退出
          logout() {
            this.profile = {} as Profile
            removeProfile()
              // 清空购物车数据
            const { cart } = useStore()
            cart.clearCart()
          },
        // 获取短信验证码
        async sendMobileCode(mobile: string) {
          await request.get('/login/code', {
          params: {
              mobile,
          },
          })
        },
        // 绑定qq的短信验证码
        async sendQQBindMsg(mobile: string) {
        await request.get('/login/social/code', {
        params: {
              mobile
          }
          })
        },
        // ----------------------------------------
        // 获取短信验证码
        // 绑定qq的短信验证码
        async sendQQPathMsg(mobile: string) {
          await request.get('/register/code', {
            params: {
              mobile
            }
          })
        },
        async qqPatchLogin(data: any) {
          const res = await request.post<ApiRes<Profile>>(
            `/login/social/${data.openId}/complement`,
            data
          )
          // 1. 保存用户信息到 state 中
          this.profile = res.data.result
          setProfile(res.data.result)
        }
    }
})